import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX
import numpy as npcreate_time
# 假设您的数据在CSV文件中，并且包含'发货时间'（日期时间格式）、'货品类型'和'销售量'列
df = pd.read_csv('clear_data.csv', parse_dates=[''])
df.set_index('create_time', inplace=True)
df['月份'] = df.index.month
# 对货品类型进行分组，并确保索引是DatetimeIndex
predictions = {}
for product_type, group in df.groupby('hplx'):
    # 准备特征（年份、月份）和目标（销售量）
    X = group.index.year.astype(int).to_frame().reset_index(drop=True)
    X['月份'] = group.index.month.astype(int)
    y = df.groupby(['hplx', '月份'])['jz'].sum().reset_index()

    # 使用SARIMAX模型进行拟合（假设季节性周期为12个月）
    # 注意：p, d, q, P, D, Q, s的选择需要根据具体情况调整
    model = SARIMAX(y, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
    results = model.fit()

    # 预测未来的销售量（这里假设预测下一年）
    start_date = group.index[-1] + pd.DateOffset(months=1)
    end_date = start_date + pd.DateOffset(months=11)
    future_dates = pd.date_range(start=start_date, end=end_date, freq='M')
    future_index = pd.DatetimeIndex(future_dates)

    # 使用模型进行预测
    future_sales = results.get_forecast(steps=len(future_index)).predicted_mean

    # 存储预测结果（这里将预测结果作为Series保存，索引为未来的日期）
    predictions[product_type] = pd.Series(future_sales, index=future_index)

# 将预测结果保存为DataFrame
prediction_df = pd.concat(predictions, axis=1)

# 将DataFrame保存到CSV文件中
prediction_df.to_csv('predicted_sales_with_seasonality.csv')

# 打印一条消息来确认文件已保存
print("预测结果已保存到predicted_sales_with_seasonality.csv文件中。")